/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAOHibernate;

import DAO.ExercicioDAO;
import entidade.Exercicio;
import entidade.ExercicioTreino;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author Thais
 */
public class ExercicioDAOHibernate implements ExercicioDAO {

    @Override
    public boolean salvarExercicio(Exercicio exercicio) {
        Session session = null;
        Transaction transaction = null;

        try {
            session = HibernateUtil.getSessionfacotry().getCurrentSession();
            if (session == null) {
                session = HibernateUtil.getSessionfacotry().openSession();
            }
            transaction = session.getTransaction();
            if (!transaction.isActive()) {
                transaction = session.beginTransaction();
            }
            session.saveOrUpdate(exercicio);
            transaction.commit();
            return true;
        } catch (HibernateException e) {
            System.out.println("Não foi possível inserir o conf. Erro:" + e.getMessage());
        } finally {
            try {
                if (session.isOpen()) {
                    session.close();
                }
            } catch (Throwable e2) {
                System.out.println("Erro ao fechar operação de inserção. Mensagem: " + e2.getMessage());
            }
        }
        return false;
    }

    @Override
    public List<Exercicio> buscarPorGrupoMuscular(String grupoMuscular) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProjetoFinalClientePU");
        EntityManager em = emf.createEntityManager();
        Query buscar = em.createQuery("Select object(c) from Exercicio as c where c.grupoMuscular LIKE ?1");
        buscar.setParameter(1, grupoMuscular);
        return buscar.getResultList();
    }

    @Override
    public boolean excluirExercicio(Exercicio exercicioSelecionado) {
        Session session = null;
        Transaction transaction = null;

        try {
            session = HibernateUtil.getSessionfacotry().getCurrentSession();
            if (session == null) {
                session = HibernateUtil.getSessionfacotry().openSession();
            }
            transaction = session.getTransaction();
            if (!transaction.isActive()) {
                transaction = session.beginTransaction();
            }

            //verifica se nao esta em algum treino
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProjetoFinalClientePU");
            EntityManager em = emf.createEntityManager();
            Query buscar = em.createQuery("Select object(c) from ExercicioTreino as c where c.exercicio.idExercicio = ?1");
            buscar.setParameter(1, exercicioSelecionado.getIdExercicio());
            List<ExercicioTreino> exerT = (List<ExercicioTreino>) buscar.getResultList();
            if (exerT.isEmpty()) {
                session.delete(exercicioSelecionado);
                transaction.commit();
                return true;
            }
            return false;
        } catch (ConstraintViolationException c) {
            return false;
        } catch (HibernateException e) {
            System.out.println("Não foi possível inserir o conf. Erro:" + e.getMessage());
        } finally {
            try {
                if (session.isOpen()) {
                    session.close();
                }
            } catch (Throwable e2) {
                System.out.println("Erro ao fechar operação de inserção. Mensagem: " + e2.getMessage());
            }
        }
        return false;
    }

    @Override
    public Exercicio buscarPorNome(String nome) {
        try {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProjetoFinalClientePU");
            EntityManager em = emf.createEntityManager();
            Query buscar = em.createQuery("Select object(c) from Exercicio as c where c.nome like ?1");
            buscar.setParameter(1, nome);
            List List = buscar.getResultList();
            if (List.size() > 0) {
                return (Exercicio) List.get(0);
            }
        } catch (HibernateException e) {
            System.out.println("Não foi possível inserir o conf. Erro:" + e.getMessage());
        } finally {
            try {
            } catch (Throwable e2) {
                System.out.println("Erro ao fechar operação de inserção. Mensagem: " + e2.getMessage());
            }
        }
        return null;
    }
}
